package LinkedListSeries;

public class SwapPairsSolution_24_2 {
    public ListNode swapPairs(ListNode head) {
        ListNode dummyhead = new ListNode(-1); // 虚拟头结点
        dummyhead.next = head;
        ListNode cur = dummyhead;

        ListNode firstNode; // 每轮操作的第一个结点
        ListNode secondNode; // 每轮操作的第二个结点
        ListNode temp;

        // 每一轮交换两个结点，判断循环终止条件
        while (cur.next != null && cur.next.next != null) {
            firstNode = cur.next;
            secondNode = cur.next.next;
            temp = cur.next.next.next;

            cur.next = secondNode;
            secondNode.next = firstNode;
            firstNode.next = temp;

            cur = firstNode; // cur后移，处理下一轮情况
        }
        return dummyhead.next;
    }
}
